package org.xlp.mvc.annotation;

import java.lang.annotation.*;

/**
 * Create by xlp on 2021/6/12
 *
 * 请求参数为bean注解
 */
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在，在运行时可以通过反射获取到
@Target({ElementType.PARAMETER})//定义注解的作用目标**作用范围字段 （作用在类或接口上或函数上）
@Documented//说明该注解将被包含在javadoc中
public @interface RequestBean {
    /**
     * 描述
     */
    String description() default "";

    /**
     * 参数名称
     */
    String value() default "";

    /**
     * 标记参数是否必须有，默认必须有
     */
    boolean required() default true;

    /**
     * bean数据来源，默认是来源于请求体
     * @return
     */
    BeanFrom from() default BeanFrom.FROM_REQUEST_BODY;

    /**
     * 标记是否使用{@link org.xlp.javabean.annotation.FieldName}字段注解映射，默认使用
     * @return
     */
    boolean useFieldName() default true;

    /**
     * 标记是否使用bean名称作为前缀，查找相应属性数据，默认不使用
     * @return
     */
    boolean useBeanNameWithPrefix() default false;

    /**
     * 标记字符值时，是否去掉首尾空字符，默认是
     * @return
     */
    boolean trim() default true;

    /**
     * bean 来源
     */
    public enum BeanFrom{
        /**
         * 转换bean时数据来源于请求参数
         */
        FROM_REQUEST_PARAMETERS,
        /**
         * 转换bean时数据来源于请求头
         */
        FROM_REQUEST_HEADERS,
        /**
         * 转换bean时数据来源于请求体
         */
        FROM_REQUEST_BODY
    }
}
